<?php

namespace app\admin\controller;

use think\Controller;
use think\Db;
use think\Request;

class User extends Admin
{
    /**
     * 显示资源列表
     *
     * @return \think\Response
     */
    public function index()
    {
        // 查询user表
        $data = Db::name('user_role')
            ->alias('ur')
            ->join('role r','r.id=ur.rid')
            ->join('user u','u.id=ur.uid')
            ->field(['u.id'=>'id','u.name'=>'name','u.username'=>'username',"group_concat(r.name)"=>'rname'])
            ->group('u.id')
            ->paginate(4);
        // 分页

        $page = $data->render();
        $this->assign('data', $data);
        $this->assign('page', $page);
        return $this->fetch('user/index');
    }

    /**
     * 显示创建资源表单页.
     *
     * @return \think\Response
     */
    public function create()
    {
        return view('user/create');
    }

    /**
     * 保存新建的资源
     *
     * @param  \think\Request  $request
     * @return \think\Response
     */
    public function save(Request $request)
    {
        $data = $request->post();
        $sw = null;
        // 启动事务
        Db::startTrans();
        try{
            // 数据验证
            if ($data['userpass'] == $data['repass']) {
                unset($data['repass']);
                $data['userpass'] = md5($data['userpass']);
                $res = Db::name('user')
                    ->insert($data);
                $uid = Db::name('user')->getLastInsID();
                // 默认角色员工
                $rid = Db::name('role')
                    ->field('id')
                    ->where('name','员工')
                    ->find();
                // 生成数组
                $arr['uid'] = $uid;
                $arr['rid'] = $rid['id'];
                Db::name('user_role')
                    ->insert($arr);
                // 提交事务
                Db::commit();
                $sw = true;
            } else {
                return $this->error('两次密码不一致,请重新输入');
            }
        } catch (\Exception $e) {
             // 回滚事务
            Db::rollback();
            return $this->error('添加失败,请重新添加...');
        }

        if ($sw) {
            return $this->success('添加成功!',url('admin/user/index'));
        }

    }

    /**
     * 显示指定的资源
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function read($id)
    {
        //
    }

    /**
     * 显示编辑资源表单页.
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function edit($id)
    {
        $user = Db::name('user')
            ->field(['id','name','username'])
            ->find($id);
        return view('',[
            'user'=>$user
        ]);
    }

    /**
     * 保存更新的资源
     *
     * @param  \think\Request  $request
     * @param  int  $id
     * @return \think\Response
     */
    public function update(Request $request, $id)
    {
        $put = $request->put();
        unset($put['_method']);
        // 更新
        $res = Db::name('user')
            ->where('id',$id)
            ->data($put)
            ->update();
        if ($res) {
            return $this->success('修改成功!',url('admin/user/index'));
        } else {
            return $this->error('修改失败,请重新修改!');
        }
    }

    /**
     * 删除指定资源
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function delete($id)
    {
        $data['status'] = true;
        // 执行删除
        Db::startTrans();
        try {
            Db::name('user')
                ->delete($id);

            Db::name('user_role')
                ->where('uid', $id)
                ->delete();
            // 提交事务
            Db::commit();
            return json($data);
        } catch (\Exception $e) {
            // 回滚事务
            Db::rollback();
            $data['status'] = false;
            return json($data);
        }
    }

    // 分配角色
    public function role($id)
    {
        // 查询权限表和角色权限表和角色表
        $sql = "select r.id from QBQ_role r,QBQ_user u,QBQ_user_role ur where r.id=ur.rid and u.id=ur.uid and ur.uid=".$id;
        $nid = Db::query($sql);
        $arr = array_column($nid, 'id');

        $data = Db::name('role')
            ->field(['id','name'])
            ->order('id', 'asc')
            ->select();
        return view('user/role', [
            'rid'=>$arr,
            'uid'=>$id,
            'data'=>$data
        ]);
    }

    public function doRole(Request $request)
    {
        $data = $request->post();
        $uid = intval($data['uid']);
        $rids = $data['rid'];

        $sw = null;
        Db::startTrans();
        try{
            // 删除原来数据
            $res = Db::name('user_role')
                ->where('uid',$uid)
                ->delete();
            // 更新数据
            foreach($rids as $v) {
                // 生成数组
                $arr['rid'] = $v;
                $arr['uid'] = $uid;
                $res1 = Db::name('user_role')
                    ->insert($arr);
            }
            // 提交事务
            Db::commit();
            $sw = true;
        } catch (\Exception $e) {
            // 回滚事务
            Db::rollback();
            $this->error('分配失败,请重新选择');
        }

        if ($sw) {
            $this->success('分配成功',url('admin/user/index'));
        }
    }

    public static function array_group_by($arr, $key)
    {
        $grouped = [];
        foreach ($arr as $value) {
            $grouped[$value[$key]][] = $value;
        }
        if (func_num_args() > 2) {
            $args = func_get_args();
            foreach ($grouped as $key => $value) {
                $parms = array_merge([$value], array_slice($args, 2, func_num_args()));
                $grouped[$key] = call_user_func_array('array_group_by', $parms);
            }
        }
        //分数排序
        foreach ($grouped as &$_group) {
            $arrSort = array();
            foreach($_group as $r_key => $r_val){
                foreach($r_val as $key => $val){
                    $arrSort[$key][$r_key] = $val;
                }
            }
        }
        return $grouped;
    }

    // 搜索
    public function doSearch(Request $request)
    {
        // 查询user表
        $input = $request->post()['search'];
//        var_dump($input);die;
        $data = Db::name('user_role')
            ->alias('ur')
            ->join('role r','r.id=ur.rid')
            ->join('user u','u.id=ur.uid')
            ->field(['u.id'=>'id','u.name'=>'name','u.username'=>'username',"group_concat(r.name)"=>'rname'])
            ->whereOr('u.name','like', '%'.$input.'%')
            ->whereor('username','like', '%'.$input.'%')
            ->whereor('r.name','like', '%'.$input.'%')
            ->group('u.id')
            ->paginate(4);

        if (!$data) {
            $data = null;
            return view('user/index',[
                'data'=>$data,
                'page'=>''
            ]);
        } else {
            // 分页
            $page = $data->render();
            $this->assign('data', $data);
            $this->assign('page', $page);
            return $this->fetch('user/index');
        }

    }
}
